package main

import (
	"fmt"
	"runtime"
	"time"
)

// Go 只会运行选定的 case，而非之后所有的 case。
// 在 Go 中，除非以 fallthrough 语句结束,否则分支会自动终止
// switch 的 case 无需为常量，且取值不限于整数。
func main() {
	os()
	Today()
	hello()
}

func os() {
	fmt.Print(" Go 运行的系统环境: ")
	switch os := runtime.GOOS; os {
	case "darwin":
		fmt.Println("macOS")
	case "Linux":
		fmt.Println("Linux")
	default:
		fmt.Printf("%s.\n", os)
	}

}

// switch 的 case 语句从上到下顺次执行，直到匹配成功时停止。
func Today() {
	fmt.Print("周六是: ")

	today := time.Now().Weekday()

	switch time.Saturday {
	case today:
		fmt.Println("今天")
	case today + 1:
		fmt.Println("明天")
	case today + 2:
		fmt.Println("后天")
	default:
		fmt.Println("很多天后")
	}
}

// 无条件的 switch 同 switch true 一样。
// 这种形式能将一长串 if-then-else 写得更加清晰
func hello() {
	t := time.Now()

	switch {
	case t.Hour() < 12:
		fmt.Println("早上好")
	case t.Hour() < 17:
		fmt.Println("下午好")
	default:
		fmt.Println("晚上好")
	}
}
